package org.csu.mypetstore.service;

import org.csu.mypetstore.domain.Cart;
import org.csu.mypetstore.domain.CartItem;
import org.csu.mypetstore.domain.CartItemDB;
import org.csu.mypetstore.domain.Item;
import org.csu.mypetstore.persistence.CartMapper;
import org.csu.mypetstore.persistence.ItemMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class CartService {
    @Autowired
    CartMapper cartMapper;
    @Autowired
    CatalogService catalogService;
    @Autowired
    ItemMapper itemMapper;

    public Cart getCartByUsername( String username ){
        List<CartItemDB> cartItemDBList = cartMapper.getCartItemsByUsername( username );
        catalogService = new CatalogService();

        Cart cart = new Cart();
        boolean isInStock;

        if( !cartItemDBList.isEmpty() ){
            for( CartItemDB cartItemDB: cartItemDBList ){
                if( cartItemDB.isValid() ){
                    //在此处用CatalogService会报itemMapper的空指针异常 无解
                    isInStock = (itemMapper.getInventoryQuantity(cartItemDB.getItemId()) > 0);
                    Item item = itemMapper.getItem(cartItemDB.getItemId());
                    item.setCartQuantity( cartItemDB.getQuantity() );
                    cart.addItem(item, isInStock);
                }
            }
        }


        return cart;
    }

    public boolean checkIfDbCartContainsItem(String itemId, String username){
        CartItemDB cartItemDB = cartMapper.getCartItemByItemIdAndUsername( itemId, username );
        return ( cartItemDB != null );
    }

    public void addItemToCart( String itemId, String username ){
        CartItemDB cartItemDB = cartMapper.getCartItemByItemIdAndUsername( itemId, username );
        if( cartItemDB == null ){ //数据库中不存在对应商品
            cartItemDB = new CartItemDB();
            cartItemDB.setUsername( username );
            cartItemDB.setItemId( itemId );
            cartItemDB.setQuantity( 1 );
            cartItemDB.setValid( true );
            cartMapper.insertItemToCart( cartItemDB );
        }else{ //数据库中存在对应商品
            if(cartItemDB.isValid()){
                cartItemDB.incrementQuantity();
            } else {
              cartItemDB.setValid( true );
              cartItemDB.setQuantity( 1 );
            }
            cartMapper.updateCartItem( cartItemDB );
        }
    }

    public void removeCartItem( String itemId, String username ){
        CartItemDB cartItemDB = new CartItemDB();
        cartItemDB.setUsername( username );
        cartItemDB.setItemId( itemId );
        cartItemDB.setValid( false );

        cartMapper.updateCartItemValid( cartItemDB );
    }

    public void setCartItemQuantity( CartItemDB cartItemDB ){
        cartMapper.updateCartItemQuantity( cartItemDB );
    }

    public void clearCart( String username ){
        cartMapper.clearCart( username );
    }

    public void updateCartDBByCart( Cart cart, String username ){
        List<CartItem> cartItemList = cart.getCartItemList();
        for(CartItem cartItem: cartItemList ){
            CartItemDB cartItemDB = new CartItemDB();
            cartItemDB.setUsername( username );
            cartItemDB.setItemId( cartItem.getItem().getItemId() );
            cartItemDB.setQuantity( cartItem.getCartQuantity() );
            cartItemDB.setValid( true );
            cartMapper.updateCartItem( cartItemDB );
        }
    }


}
